package org.thirdHero.db.service;

import com.github.pagehelper.PageHelper;
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.thirdHero.core.constant.CommonConstant;
import org.thirdHero.core.util.StringUtil;
import org.thirdHero.db.dao.SysRedPackageMapper;
import org.thirdHero.db.domain.SysRedPackage;
import org.thirdHero.db.domain.SysRedPackageExample;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

@Service
@Transactional
public class SysRedPackageService {
    private final static Logger logger = LoggerFactory.getLogger(SysRedPackageService.class);

    @Resource
    private SysRedPackageMapper sysRedPackageMapper;

    /**
     * 分页查询
     * @param sysRedPackage 查询对象
     * @param page 当前页
     * @param limit 每页显示条数
     * @return
     */
    public List<SysRedPackage> pageList(SysRedPackage sysRedPackage, Integer page, Integer limit) {
        SysRedPackageExample sysRedPackageExample = commonSelective(sysRedPackage);
        sysRedPackageExample.setOrderByClause(" create_date desc");
        PageHelper.startPage(page,limit);
        return this.sysRedPackageMapper.selectByExample(sysRedPackageExample);
    }

    /**
     * 根据id查询信息
     * @param id
     * @return
     */
    public SysRedPackage queryById(String id){
        return this.sysRedPackageMapper.selectByPrimaryKey(id);
    }
    /**
     * 更新信息
     * @param sysRedPackage
     * @return
     */
    public int updateByPrimaryKeySelective(SysRedPackage sysRedPackage) {
        if(Strings.isNullOrEmpty(sysRedPackage.getId())){
            return 0;
        }
        return sysRedPackageMapper.updateByPrimaryKeySelective(sysRedPackage);
    }

    /**
     * 根据主键更新所有内容
     * @param sysRedPackage
     * @return
     */
    public int updateByPrimaryKey(SysRedPackage sysRedPackage){
        if(Strings.isNullOrEmpty(sysRedPackage.getId())){
            return 0;
        }
        return sysRedPackageMapper.updateByPrimaryKey(sysRedPackage);
    }
    /**
     * 伪删除
     * @param  sysRedPackage
     * @return
     */
    public int pseudoDel(SysRedPackage sysRedPackage){
        if(Strings.isNullOrEmpty(sysRedPackage.getId())){
            return 0;
        }
        SysRedPackage preDelParam = new SysRedPackage();
        preDelParam.setId(sysRedPackage.getId());
        preDelParam.setDeleted(CommonConstant.IS_DELETE);
        preDelParam.setModifyDate(LocalDateTime.now());
        return sysRedPackageMapper.updateByPrimaryKeySelective(preDelParam);
    }
    /**
     * 根据id查询信息
     * @param sysRedPackage
     * @return
     */
    public int delete(SysRedPackage sysRedPackage) {
        if(Strings.isNullOrEmpty(sysRedPackage.getId())){
            return 0;
        }
        return sysRedPackageMapper.deleteByPrimaryKey(sysRedPackage.getId());
    }
    /**
     * 保存信息
     * @param sysRedPackage
     * @return
     */
    public int saveSysRedPackage(SysRedPackage sysRedPackage) {
        sysRedPackage.setCreateDate(LocalDateTime.now());
        sysRedPackage.setModifyDate(LocalDateTime.now());
        sysRedPackage.setDeleted(CommonConstant.NOT_DELETE);
        sysRedPackage.setId(StringUtil.getUUID());
        return sysRedPackageMapper.insert(sysRedPackage);
    }

    /**
     * 根据example统计个数
     * @param sysRedPackage
     * @return
     */
    public long countByExample(SysRedPackage sysRedPackage){
        SysRedPackageExample sysRedPackageExample = commonSelective(sysRedPackage);
        return sysRedPackageMapper.countByExample(sysRedPackageExample);
    }

    /**
     * 根据example删除内容
     * @param sysRedPackage
     * @return
     */
    public int deleteByExample(SysRedPackage sysRedPackage){
        SysRedPackageExample sysRedPackageExample = commonSelective(sysRedPackage);
        return sysRedPackageMapper.deleteByExample(sysRedPackageExample);
    }

    /**
     * 根据example查询单个数据
     * @param sysRedPackage
     * @return
     */
    public SysRedPackage selectOneByExample(SysRedPackage sysRedPackage){
        SysRedPackageExample sysRedPackageExample = commonSelective(sysRedPackage);
        return sysRedPackageMapper.selectOneByExample(sysRedPackageExample);
    }

    /**
     * 根据example查询数据
     * @param sysRedPackage
     * @return
     */
    public List<SysRedPackage> selectByExample(SysRedPackage sysRedPackage){
        SysRedPackageExample sysRedPackageExample = commonSelective(sysRedPackage);
        return sysRedPackageMapper.selectByExample(sysRedPackageExample);

    }


    /**
     * 通用查询
     * @param sysRedPackage
     * @return
     */
    private SysRedPackageExample commonSelective(SysRedPackage sysRedPackage) {
        SysRedPackageExample example = new SysRedPackageExample();
        SysRedPackageExample.Criteria criteria = example.createCriteria();
        if(!Strings.isNullOrEmpty(sysRedPackage.getName())){
            criteria.andNameLike("%"+sysRedPackage.getName()+"%");
        }
        if(!Strings.isNullOrEmpty(sysRedPackage.getCategoryId())){
            criteria.andCategoryIdLike("%"+sysRedPackage.getCategoryId()+"%");
        }
        if(!Strings.isNullOrEmpty(sysRedPackage.getDesc())){
            criteria.andDescLike("%"+sysRedPackage.getDesc()+"%");
        }
        if(sysRedPackage.getCreateDate()!=null){
            criteria.andCreateDateGreaterThanOrEqualTo(sysRedPackage.getCreateDate());
        }
        return example;
    }
   /**
     * 查询所有信息
     * @return
     */
    public List<SysRedPackage> queryAll( ) {
        SysRedPackageExample sysRedPackageExample = new SysRedPackageExample();
        return this.sysRedPackageMapper.selectByExample(sysRedPackageExample);
    }
}
